GitHub Advanced Securityの主要な3つの機能を試してみた
こんにちは、豊島です。
はじめに
GitHub Advanced Securityの3つの主要な機能(Dependabot
、コードスキャン
、シークレットスキャン
)を試してみました。
GitHub Advanced Securityの主要な3つの機能について
- そもそもGitHub Advanced Security(以下GHAS)とは
GitHub Advanced Security (GHAS) は、開発者を支援するアプリケーションセキュリティソリューションです。 Advanced Securityはワークフローに直接組み込まれているため、開発を遅らせることなく、脆弱性と資格情報の漏洩を防ぐことができます。 GitHub Advanced Security は、専属のセキュリティコンサルタントに、世界中のセキュリティ専門家の分析情報を使って、すべてのコード行を確認してもらうようなものです。
各ソリューションを表にまとめてみました
機能 | 概要 | チェックタイミング | パブリックリポジトリ | プライベートリポジトリ |
---|---|---|---|---|
Dependabot | - プロジェクトで利用されているライブラリとフレームワークの更新を定期的にチェック - 既知の脆弱性を含む依存関係の更新のプルリクエストを自動で作成可能 - 脆弱性がない場合でも依存関係を最新の状態に保つプルリクエストを自動で作成可能 |
- 定期的(頻度は設定可能) - 新しい脆弱性が報告されたとき - 依存関係に新しいバージョンがリリースされたとき |
無料 | 無料 |
コードスキャン | - プルリクエストのワークフロー内でソースコードを分析 - セキュリティの脆弱性やコーディングエラーをチェック |
- プルリクエスト作成時 - プッシュ時(設定による) - 定期的なスケジュール(設定による) |
無料 | 有料(従量制[1])[2] |
シークレットスキャン | - ソースコード内のAPIキーやトークンなどの機密情報の不慮の露出を特定(規定ではGitHubパートナーが提供する設定が適用されており、カスタムパターンの設定が可能) - コミット時にコードをスキャンし、シークレットが存在する場合はプッシュをブロックする |
- コミット時(プッシュ前) - プッシュ時 - 既存のリポジトリに対して定期的に |
無料 | 有料[3] |
それぞれの設定を確認
リポジトリの画像を例に設定しています
Securityタブから
- Dependabot alerts
- Code scanning alerts
- Secret scanning alerts
がEnableになっていることを確認します(デフォルトではSecret scanning alerts
のみEnableになっていますね)
設定後
Dependabotを試してみる
すでにDependabotのアラートが3つあがっているため、#1から確認していきます
Create Dependabot security update
からプルリクエストを作成していきます
右側にSeverity(重大度の評価とスコア)
といったメタデータが表示されています
詳細を知りたい方はDependabot アラートのメタデータについてを参照ください
作成できたようなので、Review security update
から確認します。
問題がなければマージしましょう(マージ後にアラートが消えていました)
続けて#2も同様に実施します。
Create中に失敗しました。どうやら他のパッケージとの依存関係が原因のようです。
しかし内容をよく見るとnextのバージョンが14.2.10であればOKなため、package.json
のバージョンを変えてマニュアルでインストールしてみたところアラートが消えました。
今回はパブリックリポジトリを対象に適用しましたが、GitHub Enterprise Cloud (GHEC)と組み合わせることでプライベートリポジトリにも適用することができます
(おまけ) Dependency graphからSBOMを出力してみる
Dependency graph(依存関係グラフ)
からSBOMが出力できたので、おまけとして手順を残します。
Settings
タブ Code security
からDependency graph
がEnabled
になっていることを確認してください。(画像ではInsightsタブがアクティブになっていますが、Settingsから確認できます)
Insights
タブDependency graph
にあるExport SBOM
から出力可能です
Dependency graph(依存関係グラフ)
が利用可能なリポジトリ
- パブリックリポジトリ (既定ではオン)
- プライベートリポジトリ
- フォーク
依存関係グラフについて
コードスキャンを試してみる
演習用のリポジトリで試していきます
まずはそれぞれの設定がEnableになっていることを確認していきます
Settings
タブのSecurity
Code security
から
Tools
のCodeQL analysis
をDefault
で設定していきます
今回はデフォルトのまま設定していきます
Actions
のCodeQL Setup
が完了になっていることを確認します
Security
タブのCode Scanning
に2件あがってきています
(ここから演習順序から外れます)
alertの詳細を見るとRecommendation
やExample
から修正の手助けができるようになっています
今回は上部にあるCopilot Autofix
を試してみたのですが、変更内容を自動で作成してくれる機能のようです
プルリクエスト作成時にもCodeQLが実行され、変更内容を含めた評価が実行されています
マージ後に、alertは消えています
シークレットスキャンを試してみる
演習用のリポジトリで試していきます
まずはそれぞれの設定がEnableになっていることを確認していきます
Settings
タブのSecurity
Code security
から
Secret scanning
とPush protection
がEnableであることを確認します
Security
のSecret Scanning
から検出済みのSecret情報を確認することができます。
Validity
でシークレットが有効かどうかをチェックすることができます。流出してしまったシークレットが"active"
,"inactive"
,"Unknown"
かをチェックし、対応の優先順位付けに役立ちます。
Secret type
でシークレットの種別をフィルターすることができます
アラートの内容からはSecret type
ごとに具体的な対応方法が記載されています(写真はAWSのため)
プッシュ保護が有効化されているため、コンソール上からコミットしようとしたところポップアップが出ました。
具体的な箇所、意図したものであるかどうかの確認が出ています。これらを選択することでAllow Secret
からプッシュ可能でした。
エディタから同様にプッシュしたところ、エラーが発生しました。
エラー時のログ
具体的なpathが記載されています
> git push origin main:main
remote: error: GH013: Repository rule violations found for refs/heads/main.
remote:
remote: - GITHUB PUSH PROTECTION
remote: —————————————————————————————————————————
remote: Resolve the following violations before pushing again
remote:
remote: - Push cannot contain secrets
remote:
remote:
remote: (?) Learn how to resolve a blocked push
remote: https://docs.github.com/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-command-line#resolving-a-blocked-push
remote:
remote:
remote: —— GitHub Personal Access Token ——————————————————————
remote: locations:
remote: - commit: 5af768990df6b081e2c598286ba7d99d0629806a
remote: path: credentials.yml:6
remote:
remote: (?) To push, remove secret from commit(s) or follow this URL to allow the secret.
remote: https://github.com//skills-introduction-to-secret-scanning/security/secret-scanning/unblock-secret/2pNZmKbaYbFAvnuv2OsX3IUlHwq
remote:
remote:
remote:
To https://github.com//skills-introduction-to-secret-scanning.git
! [remote rejected] main -> main (push declined due to repository rule violations)
error: failed to push some refs to 'https://github.com//skills-introduction-to-secret-scanning.git'
最後に
Dependabot
、コードスキャン
、シークレットスキャン
を試してみました。
どなたかの参考になれば幸いです。
GitHub Actionsを利用するため。GitHub Actionsを無効にして実行することも可能ですが、
GitHub Actions ほど優れたパフォーマンス、可視性、または Dependabot 更新ジョブの制御は提供されません。
と記載がありました GitHub ActionsランナーのDependabotについて ↩︎GitHub Enterprise Cloudを利用かつGitHub Advanced Securityのライセンスを持つOrganizationによって所有されていることコード スキャンについて ↩︎
GitHub Enterprise Cloudを利用かつGitHub Advanced Securityオプションが必要 シークレットスキャンについて ↩︎